package com.example.demo.framework.util;

import java.math.BigDecimal;

/**
 * 运算操作工具类
 * @author jcong
 *
 * @date: 2018年4月11日 下午9:05:03
 */
public class DoubleUtil {

	private static final int DEFAULT_DIV_SCALE = 10;

	/**
	 * 加
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double add(Double d1, Double d2) {
		BigDecimal b1 = new BigDecimal(d1.toString());
		BigDecimal b2 = new BigDecimal(d2.toString());
		return new Double(b1.add(b2).doubleValue());
	}

	/**
	 * 减
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double sub(Double d1, Double d2) {
		BigDecimal b1 = new BigDecimal(d1.toString());
		BigDecimal b2 = new BigDecimal(d2.toString());
		return new Double(b1.subtract(b2).doubleValue());
	}

	/**
	 * 乘
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double mul(Double d1, Double d2) {
		BigDecimal b1 = new BigDecimal(d1.toString());
		BigDecimal b2 = new BigDecimal(d2.toString());
		return new Double(b1.multiply(b2).doubleValue());
	}

	/**
	 * 除
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double div(Double d1, Double d2) {
		return div(d1, d2, DEFAULT_DIV_SCALE);
	}

	public static Double div(Double d1, Double d2, int scale) {
		if (scale < 0)
			throw new IllegalArgumentException("The scale must be a positive integer or zero");
		BigDecimal b1 = new BigDecimal(d1.toString());
		BigDecimal b2 = new BigDecimal(d2.toString());
		return new Double(b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue());
	}
}
